package service;

import data.*;

/**
 * 子弹控制服务类
 */
public class BulletService {
    // -------------------- service --------------------
    private GameRuntimeData runtimeData;

    public BulletService() {
        this.runtimeData = GameRuntimeData.getInstance();
    }

    /**
     * 功能: 更新所有子弹状态
     * 参数: void
     * 返回值: void
     */
    public void updateAllBullets() {
        // 更新我方子弹
        if (runtimeData.getHero() != null) {
            for (BulletData bullet : runtimeData.getHero().getBulletPool()) {
                updateBullet(bullet);
            }
        }

        // 更新敌方子弹
        for (EnemyData enemy : runtimeData.getEnemyPool()) {
            for (BulletData bullet : enemy.getBulletPool()) {
                updateBullet(bullet);
            }
        }
    }

    /**
     * 功能: 更新单个子弹
     * 参数:
     *   bullet: 子弹数据
     * 返回值: void
     */
    private void updateBullet(BulletData bullet) {
        if (bullet.getState() != 1) return;

        // 移动子弹
        switch (bullet.getDirection()) {
            case 0: bullet.setY(bullet.getY() - bullet.getSpeed()); break; // 上
            case 1: bullet.setX(bullet.getX() + bullet.getSpeed()); break; // 右
            case 2: bullet.setY(bullet.getY() + bullet.getSpeed()); break; // 下
            case 3: bullet.setX(bullet.getX() - bullet.getSpeed()); break; // 左
        }

        // 检查边界
        if (bullet.getX() < 0 || bullet.getX() > 800 || bullet.getY() < 0 || bullet.getY() > 800) {
            bullet.setState(0); // 子弹消失
        }
    }
    // -------------------- service --------------------
}